home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1997 April
/
EnigmA AMIGA RUN 17 (1997)(G.R. Edizioni)(IT)[!][issue 1997-04][EAR-CD].iso
/
EARCD
/
comm
/
thor
/
thor24arexx.lha
/
TicTacToe.thor
< prev
next >
Wrap
Text File
|
1996-11-11
|
11KB
|
519 lines
/* TicTacToe.thor by Troels Walsted Hansen (some additional stuff by Sigbjørn Skjæret)
** $VER: TicTacToe.thor v1.12 (30.05.95)
**
** Play TicTacToe!
**
** Tons of code ripped from:
** 'TicTacSpot v1.0 © 1993 PSR Software'
*/
TEMPDIR = 'T:'
/* needs THOR and bbsread.library functions */
options results
p = ' ' || address() || ' ' || show('P',,)
thorport = pos(' THOR.',p)
if thorport > 0 then thorport = word(substr(p,thorport+1),1)
else
do
say 'No THOR port found!'
exit 10
end
if ~show('p', 'BBSREAD') then
do
address command
"run >nil: `GetEnv THOR/THORPath`bin/LoadBBSRead"
"WaitForPort BBSREAD"
end
/* start of script */
address(thorport)
SAVEMESSAGE CURRENT FILENAME '"' || TEMPDIR || 'TicTacToe.thor.temp' || '"' NOHEADER NOANSI
if ~Open('Inp',TEMPDIR'TicTacToe.thor.temp','r') then
do
REQUESTNOTIFY TEXT '"Cannot open temporary file: ' || TEMPDIR || 'TicTacToe.thor.temp"' BT '"_Ok"'
exit
end
do y=1 to 4
do x=1 to 3
POS.x.y=' '
end
end
newgame = 0
do until pos('* TicTacToe',LINE)>0
If Eof('Inp') Then Do
REQUESTNOTIFY TEXT '"Message contains no TicTacToe data!"' BT '"_Ok"'
REQUESTNOTIFY TEXT '"Start new game?"' BT '"_Yes|_No"'
if(rc=0 & result = 1) then do
newgame = 1
call close('Inp')
signal PlayMove
end
exit
end
if exists('Ram:Plop') then exit
LINE=readln('Inp')
end
call readln('Inp')
LINE.1=readln('Inp')
call readln('Inp')
call readln('Inp')
LINE.2=readln('Inp')
call readln('Inp')
call readln('Inp')
LINE.3=readln('Inp')
call readln('Inp')
call readln('Inp')
xplayer = substr(readln('Inp'), 7)
oplayer = substr(readln('Inp'), 7)
call close('Inp')
do y=1 to 3
parse var LINE.y POS1' | 'POS2' | 'POS3
POS1=right(POS1,2)
POS2=left(POS2,2)
POS3=left(POS3,2)
if POS1='/\' then POS.1.y='o'
if POS1='\/' then POS.1.y='x'
if POS2='/\' then POS.2.y='o'
if POS2='\/' then POS.2.y='x'
if POS3='/\' then POS.3.y='o'
if POS3='\/' then POS.3.y='x'
end
PlayMove:
address(thorport)
CURRENTBBS stem CURRENT
if(rc ~= 0) then
do
address(thorport)
REQUESTNOTIFY TEXT '"'THOR.LASTERROR'"' BT '"_Ok"'
signal exit
end
address(bbsread)
GETBBSDATA bbsname '"'CURRENT.BBSNAME'"' stem BBSDATA
if(rc ~= 0) then
do
address(thorport)
REQUESTNOTIFY TEXT '"'BBSREAD.LASTERROR'"' BT '"_Ok"'
signal exit
end
if(BBSDATA.USERNAME = '') then
do
GETGLOBALDATA stem GLOBALDATA
if(rc ~= 0) then
do
address(thorport)
REQUESTNOTIFY TEXT '"'BBSREAD.LASTERROR'"' BT '"_Ok"'
signal exit
end
if(GLOBALDATA.USERNAME = '') then signal exit
else username = GLOBALDATA.USERNAME
end
else username = BBSDATA.USERNAME
if(newgame) then xplayer = username
select
when(username = oplayer) then
do
PIECE = 'o'
end
when(username = xplayer) then
do
PIECE = 'x'
end
otherwise signal exit
end
address(thorport)
DONE=0
do until DONE=1
BOARD=POS.1.1 || '|' || POS.2.1 || '|' || POS.3.1 || '\n' || POS.1.2 || '[' || POS.2.2 || ']' || POS.3.2 || '\n' || POS.1.3 || '|' || POS.2.3 || '|' || POS.3.3
REQUESTNOTIFY TEXT '"' || 'Top Row:\n' || board || '"' BT '"t_L|t_M|t_R|_Next|_Cancel"'
if result=0 then exit
if result=1 then if POS.1.1=' ' then do
DONE=1
POS.1.1=PIECE
end
if result=2 then if POS.2.1=' ' then do
DONE=1
POS.2.1=PIECE
end
if result=3 then if POS.3.1=' ' then do
DONE=1
POS.3.1=PIECE
end
if result=4 then do until DONE=1|result=4
REQUESTNOTIFY TEXT '"' || 'Middle Row:\n' || board || '"' BT '"m_L|m_M|m_R|_Next|_Cancel"'
if result=0 then exit
if result=1 then if POS.1.2=' ' then do
DONE=1
POS.1.2=PIECE
end
if result=2 then if POS.2.2=' ' then do
DONE=1
POS.2.2=PIECE
end
if result=3 then if POS.3.2=' ' then do
DONE=1
POS.3.2=PIECE
end
if result=4 then do until DONE=1|result=4
REQUESTNOTIFY TEXT '"' || 'Bottom Row:\n' || board || '"' BT '"b_L|b_M|b_R|_Next|_Cancel"'
if result=0 then exit
if result=1 then if POS.1.3=' ' then do
DONE=1
POS.1.3=PIECE
end
if result=2 then if POS.2.3=' ' then do
DONE=1
POS.2.3=PIECE
end
if result=3 then if POS.3.3=' ' then Do
DONE=1
POS.3.3=PIECE
end
end
end
end
if(newgame) then
do
EVENT.TYPE = 0 /* entermsg */
address(bbsread)
GETBBSLIST stem BBSLIST
if(rc ~= 0) then
do
address(thorport)
REQUESTNOTIFY TEXT '"'BBSREAD.LASTERROR'"' BT '"_Ok"'
exit 5
end
address(thorport)
REQUESTLIST instem BBSLIST title '"Select BBS:"' SIZEGADGET
if(rc ~= 0) then exit
else MSG.BBSNAME = result
address(bbsread)
GETCONFLIST '"'MSG.BBSNAME'"' CONFLIST
if(rc ~= 0) then
do
address(thorport)
REQUESTNOTIFY TEXT '"'BBSREAD.LASTERROR'"' BT '"_Ok"'
exit 5
end
address(thorport)
REQUESTLIST instem CONFLIST title '"Select conf:"' SIZEGADGET
if(rc ~= 0) then exit
else EVENT.CONFERENCE = result
REQUESTSTRING TITLE '"Please enter subject of message:"' BT '"_Ok|_Cancel"' ID '"TicTacToe"' MAXCHARS 100
EVENT.SUBJECT = result
if(rc ~= 0 | EVENT.SUBJECT = "") then exit
do forever
REQUESTSTRING TITLE '"Please enter the name of your opponent:"' BT '"_Ok|_Cancel "' MAXCHARS 200
if(rc ~= 0) then signal exit
EVENT.TONAME = result
if(upper(EVENT.TONAME) ~= "ALL") then
do
address(bbsread)
SEARCHBRUSER bbsname '"'MSG.BBSNAME'"' stem USERS search '"'EVENT.TONAME'"' name address alias suggestusersstem SUG
if(rc ~= 0) then signal exit
if(result > 0) then
do
drop LIST.
drop USERTAGS.
LIST.COUNT = USERS.COUNT
do n = 1 to USERS.COUNT
LIST.n.USERNR = USERS.n.USERNR
address(bbsread)
READBRUSER bbsname '"'MSG.BBSNAME'"' usernr USERS.n.USERNR tagsstem USERTAGS
if(rc ~= 0) then signal exit
LIST.n = USERTAGS.NAME
if(symbol("USERTAGS.ADDRESS") = "VAR") then
LIST.n.ADDRESS = USERTAGS.ADDRESS
end
address(thorport)
REQUESTLIST instem LIST title '"Select user:"'
if(rc ~= 0) then
do
if(rc ~= 5) then REQUESTNOTIFY TEXT '"'THOR.LASTERROR'"' BT '"_Ok"'
signal exit
end
EVENT.TONAME = result
do n = 1 to LIST.COUNT
if(LIST.n = EVENT.TONAME) then
EVENT.TOADDR = LIST.n.ADDRESS
end
leave
end
else
do
if(symbol("SUG.COUNT") = "VAR") then do
address(thorport)
REQUESTLIST instem SUG title '"Select user:"'
if(rc ~= 0) then
do
if(rc ~= 5) then REQUESTNOTIFY TEXT '"'THOR.LASTERROR'"' BT '"_Ok"'
signal exit
end
EVENT.TONAME = result
do n = 1 to SUG.COUNT
if(SUG.n = EVENT.TONAME) then
usernumber = SUG.n.USERNR
end
drop USERTAGS.
address(bbsread)
READBRUSER bbsname '"'MSG.BBSNAME'"' usernr usernumber tagsstem USERTAGS
if(rc ~= 0) then signal exit
if(symbol("USERTAGS.ADDRESS") = "VAR") then
EVENT.TOADDR = USERTAGS.ADDRESS
leave
end
else
do
address(thorport)
REQUESTNOTIFY TEXT '"No matching users found, try again?"' BT '"_Ok|_Cancel"'
if(rc ~= 0) then signal exit
if(result = 0) then signal exit
end
end
end
else signal exit /* doesn't work with ALL */
end
oplayer = EVENT.TONAME
end
else
do
CURRENTMSG stem MSG
address(bbsread)
READBRMESSAGE bbsname '"'MSG.BBSNAME'"' confname '"'MSG.CONFNAME'"' msgnr '"'MSG.MSGNR'"' headstem HEAD textstem TEXT
EVENT.TYPE = 1 /* replymsg */
EVENT.TONAME = HEAD.FROMNAME
EVENT.SUBJECT = HEAD.SUBJECT
EVENT.CONFERENCE = MSG.CONFNAME
EVENT.REFNR = MSG.MSGNR
EVENT.REFORGINALNR = HEAD.ORGINALNR
/*EVENT.REFID = HEAD.REFID*/
/*EVENT.TOADDR = TEXT.REPLYADDR*/
end
call open('Oup',TEMPDIR'TicTacToe.thor.temp','w')
LINE1=' > '
LINE2=' > '
LINE3=' > '
LINE4=' > '
LINE5=' > '
LINE6=' > '
If POS.1.1='x' Then Do
LINE1=LINE1||'\/ |'
LINE2=LINE2||'/\ |'
End
If POS.1.1='o' Then Do
LINE1=LINE1||'/\ |'
LINE2=LINE2||'\/ |'
End
If POS.1.1=' ' Then Do
LINE1=LINE1||' |'
LINE2=LINE2||' |'
End
If POS.2.1='x' Then Do
LINE1=LINE1||' \/ |'
LINE2=LINE2||' /\ |'
End
If POS.2.1='o' Then Do
LINE1=LINE1||' /\ |'
LINE2=LINE2||' \/ |'
End
If POS.2.1=' ' Then Do
LINE1=LINE1||' |'
LINE2=LINE2||' |'
End
If POS.3.1='x' Then Do
LINE1=LINE1||' \/'
LINE2=LINE2||' /\'
End
If POS.3.1='o' Then Do
LINE1=LINE1||' /\'
LINE2=LINE2||' \/'
End
If POS.1.2='x' Then Do
LINE3=LINE3||'\/ |'
LINE4=LINE4||'/\ |'
End
If POS.1.2='o' Then Do
LINE3=LINE3||'/\ |'
LINE4=LINE4||'\/ |'
End
If POS.1.2=' ' Then Do
LINE3=LINE3||' |'
LINE4=LINE4||' |'
End
If POS.2.2='x' Then Do
LINE3=LINE3||' \/ |'
LINE4=LINE4||' /\ |'
End
If POS.2.2='o' Then Do
LINE3=LINE3||' /\ |'
LINE4=LINE4||' \/ |'
End
If POS.2.2=' ' Then Do
LINE3=LINE3||' |'
LINE4=LINE4||' |'
End
If POS.3.2='x' Then Do
LINE3=LINE3||' \/'
LINE4=LINE4||' /\'
End
If POS.3.2='o' Then Do
LINE3=LINE3||' /\'
LINE4=LINE4||' \/'
End
If POS.1.3='x' Then Do
LINE5=LINE5||'\/ |'
LINE6=LINE6||'/\ |'
End
If POS.1.3='o' Then Do
LINE5=LINE5||'/\ |'
LINE6=LINE6||'\/ |'
End
If POS.1.3=' ' Then Do
LINE5=LINE5||' |'
LINE6=LINE6||' |'
End
If POS.2.3='x' Then Do
LINE5=LINE5||' \/ |'
LINE6=LINE6||' /\ |'
End
If POS.2.3='o' Then Do
LINE5=LINE5||' /\ |'
LINE6=LINE6||' \/ |'
End
If POS.2.3=' ' Then Do
LINE5=LINE5||' |'
LINE6=LINE6||' |'
End
If POS.3.3='x' Then Do
LINE5=LINE5||' \/'
LINE6=LINE6||' /\'
End
If POS.3.3='o' Then Do
LINE5=LINE5||' /\'
LINE6=LINE6||' \/'
End
call writeln('Oup',' ')
call writeln('Oup',' > * TicTacToe')
call writeln('Oup',' >')
call writeln('Oup',LINE1)
call writeln('Oup',LINE2)
call writeln('Oup',' > ----+----+----')
call writeln('Oup',LINE3)
call writeln('Oup',LINE4)
call writeln('Oup',' > ----+----+----')
call writeln('Oup',LINE5)
call writeln('Oup',LINE6)
call writeln('Oup',' >')
call writeln('Oup',' > X: 'xplayer)
call writeln('Oup',' > O: 'oplayer)
call writeln('Oup',' ')
call close('Oup')
address(bbsread)
UNIQUEMSGFILE bbsname '"'MSG.BBSNAME'"' stem UNIQUEFILE
if(rc ~= 0) then
do
address(thorport)
REQUESTNOTIFY TEXT '"'BBSREAD.LASTERROR'"' BT '"_Ok"'
exit
end
address command 'copy >nil: ' || TEMPDIR || 'TicTacToe.thor.temp' || ' TO ' || UNIQUEFILE.NAME
EVENT.MSGFILE = UNIQUEFILE.FILEPART
address(bbsread)
WRITEBREVENT bbsname '"'MSG.BBSNAME'"' event EVENT.TYPE stem EVENT
if(rc ~= 0) then
do
address(thorport)
REQUESTNOTIFY TEXT '"'BBSREAD.LASTERROR'"' BT '"_Ok"'
exit 5
end
address(thorport)
SHOWTEXT TEMPDIR'TicTacToe.thor.temp'
address command 'delete >nil: ' || TEMPDIR || 'TicTacToe.thor.temp'
address(thorport)
REQUESTNOTIFY TEXT '"Edit message?"' BT '"_Yes|_No"'
if(result=1) then STARTEDITOR FILE '"'UNIQUEFILE.NAME'"'
exit
/*
> * TicTacToe
>
> \/ | /\ | \/
> /\ | \/ | /\
> ----+----+----
> \/ | /\ | \/
> /\ | \/ | /\
> ----+----+----
> \/ | /\ | \/
> /\ | \/ | /\
>
> X: Sigbjørn Skjæret
> O: Troels Walsted_Hansen
*/
signal exit:
address command 'delete' TEMPDIR'TicTacToe.thor.temp quiet'
exit